/*
 * SVMClass.h
 *
 *  Created on: Dec 23, 2013
 *      Author: thanhkm
 */

#ifndef SVMCLASS_H_
#define SVMCLASS_H_

#include <iostream>
#include <math.h>
#include <string>
#include "opencv2/opencv.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/nonfree/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/nonfree/nonfree.hpp"
#include "opencv2/ml/ml.hpp"
#include "Utils.h"
#include "Data.h"

class Learning {
public:
	Learning();
	virtual ~Learning();
	static cv::Mat svm(cv::Mat& trainingData,
			cv::Mat& trainingClasses, cv::Mat& testData, cv::Mat& testClasses);
	static cv::Mat mlp(cv::Mat& trainingData,
			cv::Mat& trainingClasses, cv::Mat& testData, cv::Mat& testClasses);
	static cv::Mat knn(cv::Mat& trainingData,
			cv::Mat& trainingClasses, cv::Mat& testData, cv::Mat& testClasses, int K);
	static cv::Mat bayes(cv::Mat& trainingData,
			cv::Mat& trainingClasses, cv::Mat& testData, cv::Mat& testClasses);
	static cv::Mat decisiontree(cv::Mat& trainingData,
			cv::Mat& trainingClasses, cv::Mat& testData, cv::Mat& testClasses);

	static cv::Mat convertToMatData(vector<classImage> data);
	static cv::Mat convertToMatClasse(vector<classImage> data);

	static float evaluate(cv::Mat& predicted, cv::Mat& actual);
};

#endif /* SVMCLASS_H_ */
